ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² C++
#include <fstream>
#include <string>
#include <vector>
#include <memory>
class Serializable {
public:
virtual ~Serializable() = default;
virtual void serialize(std::ostream& stream) const = 0;
virtual void deserialize(std::istream& stream) = 0;
};
class NetworkMessage : public Serializable {
private:
std::string sender_;
std::string receiver_;
std::string content_;
uint64_t timestamp_;
public:
NetworkMessage() : timestamp_(0) {}
NetworkMessage(const std::string& sender, const std::string& receiver,
const std::string& content)
: sender_(sender), receiver_(receiver), content_(content) {
timestamp_ = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::system_clock::now().time_since_epoch()).count();
}
void serialize(std::ostream& stream) const override {
size_t senderSize = sender_.size();
size_t receiverSize = receiver_.size();
size_t contentSize = content_.size();
stream.write(reinterpret_cast<const char*>(&senderSize), sizeof(senderSize));
stream.write(sender_.data(), senderSize);
stream.write(reinterpret_cast<const char*>(&receiverSize), sizeof(receiverSize));
stream.write(receiver_.data(), receiverSize);
stream.write(reinterpret_cast<const char*>(&contentSize), sizeof(contentSize));
stream.write(content_.data(), contentSize);
stream.write(reinterpret_cast<const char*>(×tamp_), sizeof(timestamp_));
}
void deserialize(std::istream& stream) override {
size_t senderSize;
stream.read(reinterpret_cast<char*>(&senderSize), sizeof(senderSize));
sender_.resize(senderSize);
stream.read(&sender_[0], senderSize);
size_t receiverSize;
stream.read(reinterpret_cast<char*>(&receiverSize), sizeof(receiverSize));
receiver_.resize(receiverSize);
stream.read(&receiver_[0], receiverSize);
size_t contentSize;
stream.read(reinterpret_cast<char*>(&contentSize), sizeof(contentSize));
content_.resize(contentSize);
stream.read(&content_[0], contentSize);
stream.read(reinterpret_cast<char*>(×tamp_), sizeof(timestamp_));
}
const std::string& getSender() const { return sender_; }
const std::string& getReceiver() const { return receiver_; }
const std::string& getContent() const { return content_; }
uint64_t getTimestamp() const { return timestamp_; }
};